package com.dylan.历史.java8.lambda表达式.默认方法;

/**
 * Created by Dylan on 2018/7/19.
 *
 * 1. 可以使用接口中定义的默认方法
 * 2. 当类继承两个接口,且都有相同的方法时,必须重写该方法
 *    * 两个接口中都是抽象方法,这个类必须得实现,与冲突无关
 *    * 两个接口是默认方法,出现冲突,通过重写解决冲突
 *    * 其中一个接口是默认方法,与两个接口都是默认方法的保持一致,同样通过重写解决冲突
 */
public class Student implements Person, Named {

    public static void main(String[] args) {
        System.out.println(new Student().getId());
        System.out.println(new Student().getName());
        System.out.println(new Student().getSex());
        System.out.println(new Student().getAge());
    }

    @Override
    public long getId() {
        return 123 + getAge();
    }

    /**
     * 两个接口中都是定义了getName()方法,且都是默认方法,必须通过重写方法来解决冲突
     */
    @Override
    public String getName() {
        return Named.super.getName();
    }

    /**
     * 两个接口中都是定义了getName()方法,且其中一个是默认方法,必须通过重写方法来解决冲突
     */
    @Override
    public String getSex() {
        return "未知";
    }

}
